/*
 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

/*
 * pitch_gain_tables.c
 *
 * This file contains tables for the pitch filter side-info in the entropy coder.
 *
 */

#include "pitch_gain_tables.h"


/********************* Pitch Filter Gain Coefficient Tables ************************/

/* cdf for quantized pitch filter gains */
const WebRtc_UWord16 WebRtcIsacfix_kPitchGainCdf[255] = {
  0,  2,  4,  6,  64,  901,  903,  905,  16954,  16956,
  16961,  17360,  17362,  17364,  17366,  17368,  17370,  17372,  17374,  17411,
  17514,  17516,  17583,  18790,  18796,  18802,  20760,  20777,  20782,  21722,
  21724,  21728,  21738,  21740,  21742,  21744,  21746,  21748,  22224,  22227,
  22230,  23214,  23229,  23239,  25086,  25108,  25120,  26088,  26094,  26098,
  26175,  26177,  26179,  26181,  26183,  26185,  26484,  26507,  26522,  27705,
  27731,  27750,  29767,  29799,  29817,  30866,  30883,  30885,  31025,  31029,
  31031,  31033,  31035,  31037,  31114,  31126,  31134,  32687,  32722,  32767,
  35718,  35742,  35757,  36943,  36952,  36954,  37115,  37128,  37130,  37132,
  37134,  37136,  37143,  37145,  37152,  38843,  38863,  38897,  47458,  47467,
  47474,  49040,  49061,  49063,  49145,  49157,  49159,  49161,  49163,  49165,
  49167,  49169,  49171,  49757,  49770,  49782,  61333,  61344,  61346,  62860,
  62883,  62885,  62887,  62889,  62891,  62893,  62895,  62897,  62899,  62901,
  62903,  62905,  62907,  62909,  65496,  65498,  65500,  65521,  65523,  65525,
  65527,  65529,  65531,  65533,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
  65535,  65535,  65535,  65535,  65535
};

/* index limits and ranges */
const WebRtc_Word16 WebRtcIsacfix_kLowerlimiGain[3] = {
  -7, -2, -1
};

const WebRtc_Word16 WebRtcIsacfix_kUpperlimitGain[3] = {
  0,  3,  1
};

const WebRtc_UWord16 WebRtcIsacfix_kMultsGain[2] = {
  18,  3
};

/* size of cdf table */
const WebRtc_UWord16 WebRtcIsacfix_kCdfTableSizeGain[1] = {
  256
};

/* mean values of pitch filter gains in FIXED point Q12 */
const WebRtc_Word16 WebRtcIsacfix_kPitchGain1[144] = {
  843, 1092, 1336, 1222, 1405, 1656, 1500, 1815, 1843, 1838, 1839,
  1843, 1843, 1843, 1843, 1843,   1843, 1843, 814, 846, 1092, 1013,
  1174, 1383, 1391, 1511, 1584, 1734, 1753, 1843, 1843, 1843,   1843,
  1843, 1843, 1843, 524, 689, 777, 845, 947, 1069, 1090, 1263,
  1380, 1447, 1559, 1676,   1645, 1749, 1843, 1843, 1843, 1843, 81,
  477, 563, 611, 706, 806, 849, 1012, 1192, 1128,   1330, 1489,
  1425, 1576, 1826, 1741, 1843, 1843, 0,     290, 305, 356, 488,
  575, 602, 741,    890, 835, 1079, 1196, 1182, 1376, 1519, 1506,
  1680, 1843, 0,     47,  97,  69,  289, 381,    385, 474, 617,
  664, 803, 1079, 935, 1160, 1269, 1265, 1506, 1741, 0,      0,
  0,      0,      112, 120, 190, 283, 442, 343, 526, 809, 684,
  935, 1134, 1020, 1265, 1506, 0,      0,      0,      0,      0,      0,
  0,      111,    256, 87,  373, 597, 430, 684, 935, 770, 1020,
  1265
};

const WebRtc_Word16 WebRtcIsacfix_kPitchGain2[144] = {
  1760, 1525, 1285, 1747, 1671, 1393, 1843, 1826, 1555, 1843, 1784,
  1606, 1843, 1843, 1711, 1843,   1843, 1814, 1389, 1275, 1040, 1564,
  1414, 1252, 1610, 1495, 1343, 1753, 1592, 1405, 1804, 1720,   1475,
  1843, 1814, 1581, 1208, 1061, 856, 1349, 1148, 994, 1390, 1253,
  1111, 1495, 1343, 1178,   1770, 1465, 1234, 1814, 1581, 1342, 1040,
  793, 713, 1053, 895, 737, 1128, 1003, 861, 1277,   1094, 981,
  1475, 1192, 1019, 1581, 1342, 1098, 855, 570, 483, 833, 648,
  540, 948, 744,    572, 1009, 844, 636, 1234, 934, 685, 1342,
  1217, 984, 537, 318, 124, 603, 423, 350,    687, 479, 322,
  791, 581, 430, 987, 671, 488, 1098, 849, 597, 283, 27,
  0,     397,    222, 38,  513, 271, 124, 624, 325, 157, 737,
  484, 233, 849, 597, 343, 27,  0,      0,   141, 0,     0,
  256, 69,  0,     370, 87,  0,     484, 229, 0,     597, 343,
  87
};

const WebRtc_Word16 WebRtcIsacfix_kPitchGain3[144] = {
  1843, 1843, 1711, 1843, 1818, 1606, 1843, 1827, 1511, 1814, 1639,
  1393, 1760, 1525, 1285, 1656,   1419, 1176, 1835, 1718, 1475, 1841,
  1650, 1387, 1648, 1498, 1287, 1600, 1411, 1176, 1522, 1299,   1040,
  1419, 1176, 928, 1773, 1461, 1128, 1532, 1355, 1202, 1429, 1260,
  1115, 1398, 1151, 1025,   1172, 1080, 790, 1176, 928, 677, 1475,
  1147, 1019, 1276, 1096, 922, 1214, 1010, 901, 1057,   893, 800,
  1040, 796, 734, 928, 677, 424, 1137, 897, 753, 1120, 830,
  710, 875, 751,    601, 795, 642, 583, 790, 544, 475, 677,
  474, 140, 987, 750, 482, 697, 573, 450,    691, 487, 303,
  661, 394, 332, 537, 303, 220, 424, 168, 0,     737, 484,
  229, 624,    348, 153, 441, 261, 136, 397, 166, 51,  283,
  27,  0,     168, 0,     0,     484, 229,    0,   370, 57,  0,
  256, 43,  0,     141, 0,  0,   27,  0,   0,   0,   0,
  0
};


const WebRtc_Word16 WebRtcIsacfix_kPitchGain4[144] = {
  1843, 1843, 1843, 1843, 1841, 1843, 1500, 1821, 1843, 1222, 1434,
  1656, 843, 1092, 1336, 504,    757, 1007, 1843, 1843, 1843, 1838,
  1791, 1843, 1265, 1505, 1599, 965, 1219, 1425, 730, 821,    1092,
  249, 504, 757, 1783, 1819, 1843, 1351, 1567, 1727, 1096, 1268,
  1409, 805, 961, 1131,   444, 670, 843, 0,  249, 504, 1425,
  1655, 1743, 1096, 1324, 1448, 822, 1019, 1199, 490,    704, 867,
  81,  450, 555, 0,     0,  249, 1247, 1428, 1530, 881, 1073,
  1283, 610, 759,    939, 278, 464, 645, 0,     200, 270, 0,
  0,   0,  935, 1163, 1410, 528, 790, 1068,   377, 499, 717,
  173, 240, 274, 0,   43,  62,  0,   0,   0,   684, 935,
  1182, 343,    551, 735, 161, 262, 423, 0,      55,  27,  0,
  0,   0,   0,   0,   0,   430, 684,    935, 87,  377, 597,
  0,   46,  256, 0,   0,   0,   0,   0,   0,   0,   0,
  0
};



/* transform matrix in Q12*/
const WebRtc_Word16 WebRtcIsacfix_kTransform[4][4] = {
  { -2048, -2048, -2048, -2048 },
  {  2748,   916,  -916, -2748 },
  {  2048, -2048, -2048,  2048 },
  {   916, -2748,  2748,  -916 }
};
